/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: Lenovo
 * Date: 2025-04-16
 * Time: 6:28
 */
// 用户希望的是这个数组只能持有一种类型的数据，比如只能存String或者只能存Integer，而不是混合类型。
// 这时候就需要用泛型来限制。
// 通过泛型类，在实例化的时候指定类型参数，这样数组的类型就被限定为该类型，
// 编译器会检查setVal方法的参数类型是否匹配，并且在getPos时直接返回该类型，无需强制转换。

// 不过，在Java中不能直接创建泛型数组，比如T[] array = new T[10];是不允许的。
// 所以可能需要用Object数组，并在构造时进行强制转换，或者使用其他方式处理。
// 例如，可以将数组声明为Object[]，然后在获取时转换为T类型。
// 同时，在setVal方法中，可以确保存入的是T类型，这样取出时转换是安全的。
// 泛型类：<T> 表示类型参数
class MyArray<T> {
    private Object[] array = new Object[10]; // 底层仍用Object数组存储

    public void setVal(int pos, T val) { // 参数类型限定为T
        this.array[pos] = val; // 只能存入T类型
    }

    public T getPos(int pos) { // 返回类型为T
        return (T) this.array[pos]; // 强制转换为T（安全，因为setVal已约束类型）
    }
}
